{#-
    模板：builtin.d.ts.jinja
    用于生成 Godot 内置类型的 TypeScript 声明。

    此模板采用 "声明合并" 模式：
    1. `export interface`: 定义类型的“形状”，允许使用对象字面量 (e.g., { x: 0, y: 0 })。
       它包含实例属性 (members) 和实例方法 (methods)。
    2. `export declare const`: 定义与类型同名的构造函数和静态成员 (e.g., new Vector2(), Vector2.ZERO)。
       它包含构造函数 (constructors) 和静态常量 (constants)。
-#}
{% set class_name = get_class_name(cls.name) %}
declare global {
    export class {{ class_name }} {
        {# CONSTRUCTORS (from cls.constructors) #}
        {% for ctr in cls.constructors %}
        constructor({{ connect_args(ctr.arguments) }}): {{ class_name }};
        {% endfor %}
        {%- if class_name == 'Callable' %}
        constructor(object: GodotObject, method: Function): Callable;
        {%- endif -%}

        {# STATIC CONSTANTS (from cls.constants) #}
        {% for constant in cls.constants %}
        readonly static {{ constant.name }}: {{ class_name }};
        {% endfor %}
    
        {# INSTANCE PROPERTIES (from cls.members) #}
        {% for member in cls.members %}
        {{ member.name }}: {{ get_class_union_type(member.type) }};
        {% endfor %}

        {# INSTANCE METHODS (from cls.methods) #}
        {% for method in cls.methods %}
        {{ method.name }}({{ connect_args(method.arguments) + process_vararg(method.is_vararg, method.arguments) }}){{ set_return(method.return_type) }};
        {% endfor %}
        
        {# OPERATORS (Commented out as they don't map directly to JS/TS methods) #}
        /*
        {% for op in cls.operators %}
        // {{ get_operator_name(op.name) }}({{ set_type(op.right_type) }}): {{ set_type(op.return_type) }}
        {% endfor %}
        */
    }
}

export {};